/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ec.edu.espe.distribuidas.ejemplomaven.web;

import ec.edu.espe.distribuidas.aseguradora.modelo.CuentaSiniestro;
import ec.edu.espe.distribuidas.aseguradora.modelo.DetCuentaSiniestro;
import ec.edu.espe.distribuidas.aseguradora.modelo.Siniestro;
import ec.edu.espe.distribuidas.aseguradora.servicio.CuentaSiniestroServicio;
import ec.edu.espe.distribuidas.aseguradora.servicio.DetCuentaSiniestroServicio;
import ec.edu.espe.distribuidas.aseguradora.servicio.SiniestroServicio;
import ec.edu.espe.distribuidas.aseguradora.web.util.BotonesBean;
import ec.edu.espe.distribuidas.aseguradora.web.util.MensajesGenericos;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import org.apache.commons.beanutils.BeanUtils;

/**
 *
 * @author pacodell
 */
@ManagedBean
@ViewScoped
public class ReclamoCambioBean extends BotonesBean{
        private static final String ENTIDAD = "Siniestro";
     @EJB
    private SiniestroServicio siniestroServicio;
    @EJB
    private CuentaSiniestroServicio cuentasiniestroServicio;
    @EJB
    private DetCuentaSiniestroServicio detalleServicio;
    private List<Siniestro> siniestrosCambios;
    private Siniestro siniestroSeleccionado;
    private Siniestro siniestro;
    private DetCuentaSiniestro detalleSeleccionado;
    private DetCuentaSiniestro detalle;
    private List<DetCuentaSiniestro> listaDetalle;
    private List<CuentaSiniestro> cuentasPorSiniestro;
    private Boolean enEditando;
    private CuentaSiniestro cuenta;
    @PostConstruct
     @Override
    public void postConstructor(){
        this.siniestrosCambios= siniestroServicio.ObtenerCorreccion();
        this.enEditando=Boolean.FALSE;
    }
public void filaSeleccionada(ActionEvent evento) {
        if (siniestroSeleccionado instanceof Siniestro) {
            //super.seleccionadoUno();
            
            super.setUno(Boolean.TRUE);
        } else {
            super.sinSeleccion();
        }
    }
    public void eliminar(){
        this.siniestroServicio.eliminar(this.siniestroSeleccionado.getCodSiniestro().toString());
        this.siniestrosCambios.remove(this.siniestroSeleccionado);
        MensajesGenericos.infoEliminar(ENTIDAD, Integer.toString(this.siniestroSeleccionado.getCodSiniestro()), Boolean.TRUE);
        super.sinSeleccion();
        
    }
 
    public void editar()
    {
        this.listaDetalle= new ArrayList<DetCuentaSiniestro>();
        this.cuentasPorSiniestro= new ArrayList<CuentaSiniestro>();
         try {
            this.siniestro = new Siniestro();
            BeanUtils.copyProperties(this.siniestro, this.siniestroSeleccionado);
             super.setEnEdicion(Boolean.TRUE);
            this.cuentasPorSiniestro= this.cuentasiniestroServicio.BuscarPorSiniestro(""+siniestro.getCodSiniestro());
            for(CuentaSiniestro cuenta: cuentasPorSiniestro)
            {
                
            this.listaDetalle.addAll(cuenta.getDetCuentaSiniestroList());
            }
        } catch (IllegalAccessException | InvocationTargetException e) {
            MensajesGenericos.errorCopyProperties();
        }
    }
    
    public void editando()
    {
         try {
            this.detalle = new DetCuentaSiniestro();
            BeanUtils.copyProperties(this.detalle, this.detalleSeleccionado);
            super.setEnEdicion(Boolean.FALSE);
            this.enEditando=Boolean.TRUE;
           
        } catch (IllegalAccessException | InvocationTargetException e) {
            MensajesGenericos.errorCopyProperties();
        }
    }
    public void eliminando()
    {
         this.detalleServicio.eliminar(this.detalleSeleccionado.getCodDetalle().toString());
        this.listaDetalle.remove(this.detalleSeleccionado);
        this.cuenta=this.cuentasiniestroServicio.buscarUnoPorCodigo(this.detalleSeleccionado.getCodCuentaSieniestro().getCodCuentaSieniestro().toString());
        this.cuenta.getDetCuentaSiniestroList().remove(this.detalleSeleccionado);
        this.cuentasiniestroServicio.modificar(cuenta);
       // MensajesGenericos.infoEliminar(ENTIDAD, Integer.toString(this.siniestroSeleccionado.getCodSiniestro()), Boolean.TRUE);
        super.sinSeleccion();
         super.setEnEdicion(Boolean.TRUE);
     //     this.listaDetalle= new ArrayList<DetCuentaSiniestro>();
     //      this.cuentasPorSiniestro= this.cuentasiniestroServicio.BuscarPorSiniestro(""+siniestro.getCodSiniestro());
     //       for(CuentaSiniestro cuenta: cuentasPorSiniestro)
    //        {
                
    //        this.listaDetalle.addAll(cuenta.getDetCuentaSiniestroList());
    //        }
        
    }
        public void nuevoDetalle()
    {
  
        this.cuentasPorSiniestro= new ArrayList<CuentaSiniestro>();
           this.detalle.setTotalProducto(this.detalle.getCantidadDet()*this.detalle.getValorUnitario());
          this.detalleServicio.modificar(this.detalle);
           this.enEditando=Boolean.FALSE;
           super.setEnEdicion(Boolean.TRUE);
           
        this.listaDetalle= new ArrayList<DetCuentaSiniestro>();
           this.cuentasPorSiniestro= this.cuentasiniestroServicio.BuscarPorSiniestro(""+siniestro.getCodSiniestro());
            for(CuentaSiniestro cuenta: cuentasPorSiniestro)
            {
                
            this.listaDetalle.addAll(cuenta.getDetCuentaSiniestroList());
            }
         
    }
    public String finalizar()
    {
        this.siniestro.setEstadoReclamo("Pendiente");
        this.siniestroServicio.modificar(siniestro);
        return "inicio.xhtml";
    }
    public List<Siniestro> getSiniestrosCambios() {
        return siniestrosCambios;
    }

    public void setSiniestrosCambios(List<Siniestro> siniestrosCambios) {
        this.siniestrosCambios = siniestrosCambios;
    }

    public Siniestro getSiniestroSeleccionado() {
        return siniestroSeleccionado;
    }

    public void setSiniestroSeleccionado(Siniestro siniestroSeleccionado) {
        this.siniestroSeleccionado = siniestroSeleccionado;
    }

    public Siniestro getSiniestro() {
        return siniestro;
    }

    public void setSiniestro(Siniestro siniestro) {
        this.siniestro = siniestro;
    }

    public List<DetCuentaSiniestro> getListaDetalle() {
        return listaDetalle;
    }

    public void setListaDetalle(List<DetCuentaSiniestro> listaDetalle) {
        this.listaDetalle = listaDetalle;
    }

    public List<CuentaSiniestro> getCuentasPorSiniestro() {
        return cuentasPorSiniestro;
    }

    public void setCuentasPorSiniestro(List<CuentaSiniestro> cuentasPorSiniestro) {
        this.cuentasPorSiniestro = cuentasPorSiniestro;
    }

    public DetCuentaSiniestro getDetalleSeleccionado() {
        return detalleSeleccionado;
    }

    public void setDetalleSeleccionado(DetCuentaSiniestro detalleSeleccionado) {
        this.detalleSeleccionado = detalleSeleccionado;
    }

    public Boolean getEnEditando() {
        return enEditando;
    }

    public void setEnEditando(Boolean enEditando) {
        this.enEditando = enEditando;
    }

    public DetCuentaSiniestro getDetalle() {
        return detalle;
    }

    public void setDetalle(DetCuentaSiniestro detalle) {
        this.detalle = detalle;
    }
    
}
